Machine-translation based corrections

ABSTRACT

Technology is disclosed for building correction models that correct natural language snippets. Correction models can include rules comprising pairs of word sequences identified from viable correction snippet pairs, where a first sequence of words in the pair should be replaced with a second sequence of words in the pair. Viable correction snippet pairs can be identified from among pairs of language snippets, such as a post to a social media website and a subsequent update to that post. Viable corrections can be the snippet pairs that both have no more unaligned words than a word alignment threshold and have no aligned word pair with a character edit difference above an edit distance threshold. In some implementations, word alignments can be found by aligning all the characters between a pair of language snippets, and identifying aligned words as those that have at least one aligned letter in common.

BACKGROUND

The Internet has made it possible for people to connect and shareinformation globally in ways previously undreamt of. Social mediaplatforms, for example, enable people on opposite sides of the world tocollaborate on ideas, discuss current events, or simply share what theyhad for lunch. The amount of content generated through social mediatechnologies is staggering. It is common for social media providers tooperate databases with petabytes of media items, while leading providersare already looking toward technology to handle exabytes of data. Mediaitems at least partially containing natural language (“languagesnippets”) are subject to some human error. While at times languagesnippet authors correct these errors as they enter them, often theseerrors are only identified by an automated system or remain uncorrected.

Errors have been a particularly prevalent problem for machinetranslations of language snippets. Machine translation engines enable auser to select or provide a source content item (e.g., a message from anacquaintance) in one natural language (e.g., Spanish) and quicklyreceive a translation of the content item in a different naturallanguage (e.g., English). Machine translation engines can be createdusing training data that includes identical or similar content in two ormore languages. However, the effectiveness of these machine translationengines can be significantly reduced when the source content itemcontains errors.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram illustrating an overview of devices on whichsome implementations of the disclosed technology can operate.

FIG. 2 is a block diagram illustrating an overview of an environment inwhich some implementations of the disclosed technology can operate.

FIG. 3 is a block diagram illustrating components which, in someimplementations, can be used in a system employing the disclosedtechnology.

FIG. 4 is a flow diagram illustrating a process used in someimplementations for building a correction model.

FIG. 5 is a flow diagram illustrating a process, used in someimplementations, that finds viable corrections by filtering forcorrections from snippet pairs.

FIGS. 6A and 6B are flow diagrams illustrating processes used in variousimplementations for determining a word alignment between a pair ofsnippets.

FIG. 7 is a flow diagram illustrating a process used in someimplementations for building a correction model using locatedcorrections.

The techniques introduced here may be better understood by referring tothe following Detailed Description in conjunction with the accompanyingdrawings, in which like reference numerals indicate identical orfunctionally similar elements.

DETAILED DESCRIPTION

A natural language correction system is disclosed that generatescorrection models by identifying corrections in language snippets anduses the correction models to correct other language snippets. As usedherein, a “language snippet” is a digital representation of one or morewords or character groups. In some implementations, language snippetscan be obtained from social network content items, such as posts. A“correction model” can analyze a language snippet and replace one ormore words or characters, identified as errors, with correspondingidentified revisions according to “rules” identified in the correctionmodel. The natural language correction system can identify rules frompairs of language snippets by obtaining multiple snippet pairs andfiltering out the pairs that are not viable correction pairs. Thenatural language correction system can perform this filtering for eachselected snippet pair, of the obtained snippet pairs, by determining aword alignment for that snippet pair, and filtering out those snippetpairs that have a word alignment score above a first threshold value orthat have any aligned word pair with a character edit distance above asecond threshold value. The natural language correction system canidentify snippet pairs that remain as viable corrections. The naturallanguage correction system can then extract rules from viable correctionpairs by identifying aligned words or word groups and assigning a scoreto the identified aligned words or word groups.

An “edit distance,” as used herein, is a number of changes used tochange a first language snippet or word into a corresponding languagesnippet or word. In some implementations, changes include insertions,deletions, and substitutions, e.g. edit distance calculated usingLevenshtein distance. In some implementations, changes includeinsertions, deletions, substitutions, and transpositions, e.g. editdistance calculated using Damerau-Levenshtein distance. As used herein,a “transposition” is a change that moves a word within a snippet or acharacter within a character grouping without otherwise editing themoved word or character. A transposition can have a length indicatingthe number of word or character spaces, forward or backward a moved wordor character is moved. In some implementations, transposition length canbe limited to one. As used herein, unless otherwise specified, an “editdistance” can refer to a count of changed based on Levenshtein distance,Damerau-Levenshtein distance, or a modified version of either asdiscussed below.

An edit distance can be a “character edit distance” between twosequences of characters, such as words, indicating a number of characterchanges used to convert a first of the two sequences of characters intoa second of the two sequences of characters. An edit distance can be a“word edit distance” between two snippets indicating a number of entireword changes used to convert a first of the two snippets into a secondof the two snippets. A “minimum edit distance” is the edit distanceusing a word or character alignment that yields the smallest possibleedit distance. A minimum edit distance can be a “minimum character editdistance” or a “minimum word edit distance.” For example, the minimumcharacter edit distance (using Levenshtein distance) between the wordsof the word pair (“Spartacus”, “particle”) is four, resulting from: (1)deleting “S,” i.e. Spartacus→partacus; (2) substituting the second “a”for an “i,” i.e. partacus→particus; (3) substituting the second “u” foran “l,” i.e. particus→particls; and (4) substituting the remaining “s”for an “e,” i.e. particls→particle. As another example, the minimum wordedit distance (using Damerau-Levenshtein distance) between the snippets(“That's awesome toadly, buddy!”, “That is totally awesome, buddy!”) isfour, resulting from: (1) substituting “That” for “That's;” (2)inserting “is;” (3) transposing “awesome” with “toadly;” and (4)substituting “totally” for “toadly.”

In various implementations, the natural language correction system cantrain the correction models with spelling, grammar, punctuation, orphrasing rules, and can employ the rules in an auto-correction orsuggestion function of a language input module or as an initial stage ofperforming a machine translation. For example, a rule can specify acorrection, such as “likr”→“like.” Subsequent observations of a userentering “likr” can automatically be changed to “like,” or “like” can besuggested as a modification to the user.

As another example, a correction module that has been trained with the“likr”→“like” correction can be used during a machine translation of thelanguage snippet “I really likr your painting.” The “likr” word will nothave a direct translation, which can result in the translation includingthe untranslated word or an incorrect translation. This can make thetranslation difficult to understand and frustrating for viewers. Toprevent this, the natural language correction system can perform aninitial step in the machine translation process to make corrections tothe language snippet prior to translating it. For example, in a processto translate the original language snippet of “I really likr yourpainting” into Spanish, the translation process can create anintermediate corrected language snippet “I really like your painting,”which the machine translation process can then translate into “Me gustamucho to cuadro.” In some implementations, the intermediate correctedlanguage snippet is both used as a basis for the translation of asnippet and replaces the snippet where it appears in in the untranslatedform. In some implementations, the intermediate corrected languagesnippet is used as a basis for the translation of a snippet but theoriginal uncorrected snippet appears when an untranslated version of thesnippet is displayed.

Several implementations of the described technology are discussed belowin more detail in reference to the figures. Turning now to the figures,FIG. 1 is a block diagram illustrating an overview of devices 100 onwhich some implementations of the disclosed technology may operate. Thedevices can comprise hardware components of a device 100 that buildscorrections models for machine-translation based corrections. Device 100can include one or more input devices 120 that provide input to the CPU(processor) 110, notifying it of actions. The actions are typicallymediated by a hardware controller that interprets the signals receivedfrom the input device and communicates the information to the CPU 110using a communication protocol. Input devices 120 include, for example,a mouse, a keyboard, a touchscreen, an infrared sensor, a touchpad, awearable input device, a camera- or image-based input device, amicrophone, or other user input devices.

CPU 110 can be a single processing unit or multiple processing units ina device or distributed across multiple devices. CPU 110 can be coupledto other hardware devices, for example, with the use of a bus, such as aPCI bus or SCSI bus. The CPU 110 can communicate with a hardwarecontroller for devices, such as for a display 130. Display 130 can beused to display text and graphics. In some examples, display 130provides graphical and textual visual feedback to a user. In someimplementations, display 130 includes the input device as part of thedisplay, such as when the input device is a touchscreen or is equippedwith an eye direction monitoring system. In some implementations, thedisplay is separate from the input device. Examples of display devicesare: an LCD display screen, an LED display screen, a projected display(such as a heads-up display device or a head-mounted device), and so on.Other I/O devices 140 can also be coupled to the processor, such as anetwork card, video card, audio card, USB, firewire or other externaldevice, camera, printer, speakers, CD-ROM drive, DVD drive, disk drive,or Blu-Ray device.

In some implementations, the device 100 also includes a communicationdevice capable of communicating wirelessly or wire-based with a networknode. The communication device can communicate with another device or aserver through a network using, for example, TCP/IP protocols. Device100 can utilize the communication device to distribute operations acrossmultiple network devices.

The CPU 110 has access to a memory 150. A memory includes one or more ofvarious hardware devices for volatile and non-volatile storage, and caninclude both read-only and writable memory. For example, a memory cancomprise random access memory (RAM), CPU registers, read-only memory(ROM), and writable non-volatile memory, such as flash memory, harddrives, floppy disks, CDs, DVDs, magnetic storage devices, tape drives,device buffers, and so forth. A memory is not a propagating signaldivorced from underlying hardware; a memory is thus non-transitory.Memory 150 includes program memory 160 that stores programs andsoftware, such as an operating system 162, correction model builder 164,and any other application programs 166. Memory 150 also includes datamemory 170 that can include, for example, language snippets, viablecorrections, alignment metadata, identified rules, edit distancealgorithms, dictionaries, threshold values, configuration data,settings, and user options or preferences which can be provided to theprogram memory 160 or any element of the device 100.

The disclosed technology is operational with numerous other generalpurpose or special purpose computing system environments orconfigurations. Examples of well-known computing systems, environments,and/or configurations that may be suitable for use with the technologyinclude, but are not limited to, personal computers, server computers,handheld or laptop devices, cellular telephones, wearable electronics,tablet devices, multiprocessor systems, microprocessor-based systems,set-top boxes, programmable consumer electronics, network PCs,minicomputers, mainframe computers, distributed computing environmentsthat include any of the above systems or devices, and the like.

FIG. 2 is a block diagram illustrating an overview of an environment 200in which some implementations of the disclosed technology may operate.Environment 200 can include one or more client computing devices 205A-D,examples of which may include device 100. Client computing devices 205can operate in a networked environment using logical connections 210through network 230 to one or more remote computers such as a servercomputing device.

In some implementations, server 210 can be an edge server which receivesclient requests and coordinates fulfillment of those requests throughother servers, such as servers 220A-C. Server computing devices 210 and220 can comprise computing systems, such as device 100. Though eachserver computing device 210 and 220 is displayed logically as a singleserver, server computing devices can each be a distributed computingenvironment encompassing multiple computing devices located at the sameor at geographically disparate physical locations. In someimplementations, each server 220 corresponds to a group of servers.

Client computing devices 205 and server computing devices 210 and 220can each act as a server or client to other server/client devices.Server 210 can connect to a database 215. Servers 220A-C can eachconnect to a corresponding database 225A-C. As discussed above, eachserver 220 may correspond to a group of servers, and each of theseservers can share a database or can have their own database. Databases215 and 225 can warehouse (e.g. store) information such as languagesnippets, identified rules, dictionaries, and threshold values. Thoughdatabases 215 and 225 are displayed logically as single units, databases215 and 225 can each be a distributed computing environment encompassingmultiple computing devices, can be located within their correspondingserver, or can be located at the same or at geographically disparatephysical locations.

Network 230 can be a local area network (LAN) or a wide area network(WAN), but can also be other wired or wireless networks. Network 230 maybe the Internet or some other public or private network. The clientcomputing devices 205 can be connected to network 230 through a networkinterface, such as by wired or wireless communication. While theconnections between server 210 and servers 220 are shown as separateconnections, these connections can be any kind of local, wide area,wired, or wireless network, including network 230 or a separate publicor private network.

FIG. 3 is a block diagram illustrating components 300 which, in someimplementations, can be used in a system implementing the disclosedtechnology. The components 300 include hardware 302, general software320, and specialized components 340. As discussed above, a systemimplementing the disclosed technology can use various hardware includingcentral processing units 304, working memory 306, storage memory 308,and input and output devices 310. Components 300 can be implemented in aclient computing device such as client computing devices 205 or on aserver computing device, such as server computing device 210 or 220.

General software 320 can include various applications including anoperating system 322, local programs 324, and a BIOS 326. Specializedcomponents 340 can be subcomponents of a general software application320, such as a local programs 324. Specialized components 340 caninclude word alignment and scoring module 344, character edit distancemodule 346, correction model builder module 350, correction models 352,and components that can be used for controlling and receiving data fromthe specialized components, such as interface 342.

Word alignment and scoring module 344 can receive a pair of snippets,such as through interface 342, and determine which words between thesnippets to align. In various implementations an alignment can be foundusing a word-centric approach or a character-centric approach.

In the word-centric approach to word alignment, an alignment can befound by determining an alignment that yields the lowest total editdistance between the snippets. As used herein, a “total edit distance”for an alignment is the sum of the character edit distances between thealigned word pairs and the sum of the characters of unaligned words ofthe two snippets in the snippet pair. For example, a snippet paircomprising the snippets “gong tome” and “I'm going home,” can have aword alignment of: (<no word>, I'm), (gong, going), (tome, home). Thecharacter edit differences for each of these pairs, as computed by thecharacter edit distance module 346 discussed below, is (<no word>,I'm)=3, (gong, going)=1, (tome, home)=1. The sum of these character editdifference values, 5, is the total edit distance for this snippet pairusing this alignment. In some implementations, to find the alignmentwith the lowest total edit distance between snippet S comprising wordss1 . . . sN and snippet T comprising words t1 . . . tM a recursivealgorithm can be used. For example, edit_distance(s1 . . . sN, t1 . . .tM)=minimum(substitution_cost(s1, t1)+edit_distance(s2 . . . sN, t2 . .. tM), deletion_cost(s1)+edit_distance(s2 . . . sN, t1 . . . tM),insertion_cost(t1)+edit_distance(s1 . . . sN, t2 . . . tM)). Thisformula recurses until a termination condition: edit_distance(sequence,empty_sequence)=deletion_cost(sequence) or edit_distance(empty_sequence,sequence)=insertion_cost(sequence) is reached. In various otherimplementations, the word alignment module 344 can be configured to findalignments by: finding all possible alignments; first finding exactmatching words or words that are within a threshold difference of eachother and limit possible alignments to those that include the matchingor sufficiently similar word matches; or limiting word matches to beingwithin a threshold edit distance of each other. Identifying wordalignments using the word-centric approach is described in greaterdetail below in relation to FIG. 6A. In various implementations,correction rules are employed as part of a translation system fromincorrectly spelled to correctly spelled.

In the character-centric approach to word alignment, an alignment can befound by first aligning all characters, including white spaces, betweenthe two snippets of the snippet pair according to a minimum characteredit distance, as computed by the character edit distance module 346.Any first word in a first of the snippets that has at least one letterin common with a second word in a second of the snippets is consideredaligned with that second word. In the character-centric approach, a wordfrom one of the snippets can be aligned with more than one word in thesecond of the snippets, or vice-versa. For example, a snippet paircomprising the snippets “I loveu” and “I love you,” according to itsminimum character edit distance of three, has a character alignment of:

-   -   (“I”, “I”)    -   (“ ”, “ ”)    -   (“l”, “l”)    -   (“o”, “o”)    -   (“v”, “v”)    -   (“e”, “e”)    -   (<no char>, “ ”)    -   (<no char>, “y”)    -   (<no char>, “o”)    -   (“u”, “u”).

This alignment and character edit distance value can be computed bycharacter edit distance module 346. The resulting word alignments, i.e.the words that have at least one overlapping character, are (I, I),(loveu, love), and (loveu, you). Identifying word alignments using thecharacter-centric approach is described in greater detail below inrelation to FIG. 6B.

Word alignment and scoring module 344 can also compute a word alignmentscore for aligned snippet pairs. In some implementations, the wordalignment score for a selected snippet pair can be a count of unalignedwords. In some implementations, the word alignment score can be weightedbased on a length of one or more of the snippets, such as by computing aratio of unaligned words to the average length of the snippets in thepair. Word alignment and scoring module 344 can then identify a snippetpair as a viable correction where the word alignment score is below afirst threshold value or the character edit distance for all alignedwords between the snippets in the snippet pair is below a secondthreshold value. For example, a word alignment threshold can be set tothree (meaning no snippet pair will be identified as a viable correctionif it has more than three unaligned words) and a character edit distancethreshold can also be set to three (meaning no snippet pair will beidentified as a viable correction if any aligned word pair between thesnippets has a character edit distance of greater than 3). Identifyingviable corrections is discussed in more detail below in relation to FIG.5.

Character edit distance module 346 can receive two sequences ofcharacters and compute a character edit distance between the sequences.In some implementations, character edit distance module 346 isconfigured to find a character edit distance by first finding acharacter alignment (for example using Levenshtein orDamerau-Levenshtein distance). In some implementations, character editdistance module 346 is configured to find a character alignment thatyields a minimum character edit distance. In some implementations,computing edit distances using Damerau-Levenshtein can assign to atransposition cost values other than the cost value of an insertion,deletion, or substitution change. In some implementations, theinsertion, deletion, or substitution cost value can be 1. For example,if a word pair includes the words “ahppi” and “happy,” where the valueof an insertion, deletion, or substitution change, such as the change of“i” to “y,” is one, the transposition of “ah” and “ha” can, in variousimplementations, be assigned a value less than one, such as 0.5, equalto one, or greater than one, such as 1.5. Thus, the minimum characteredit distances for “ahppi” and “happy” in the various versions of thisexample can be 1.5, 2, or 2.5.

Correction model builder module 350 can receive snippet pairs that havebeen identified as viable corrections from word alignment and scoringmodule 344 and use them to build or augment a correction model.Correction model builder module 350 can be configured to do this byfirst determining a word alignment between the snippets of each receivedsnippet pair. In some implementations, this alignment can be determinedas part of the process for identifying the snippet pair as a viablecorrection. In some implementations, the alignment can be found usingthe IBM or HMM alignment models, with additional constraints limitingthe length and/or number of jumps a word can be moved to achieve analignment. In some implementations, the constraints can limit word jumpsto jumping a word forward only. In some implementations, the constraintscan limit word jumps to a maximum of one jump backward or up to twojumps forward. In some implementations, word alignments found bycorrection model builder module 350 can include not only single wordpairings, but can also include groups of words aligned to a group of oneor more other words. In some implementations, these groups can belimited to a maximum number of words, such as 2, 3, 4, or 5.

Once a word alignment is determined, correction model builder module 350can extract rules from the aligned viable corrections. A “rule,” as usedherein, is a pair of words or word sequences with an assigned score. Insome implementations, a rule can have a list of assigned scores. Forexample, a rule can comprise hlelo world→hello world with scores 0.1,0.53, 2. “Words,” as used herein, can be traditional words, i.e.characters separated by whitespace or punctuation, or can be othercharacter groupings, such as a number of sequential characters. The wordpair of a rule can be directional, indicating that if a first word ofthe rule pair is found it can be replaced with the second word of theword pair. As used herein, a rule can be denoted as“firstWordGroup”→“secondWordGroup”:score, where firstWordGroup indicatesone or more words to be replaced, secondWordGroup indicates one or morewords to replace the words in firstWordGroup, and score represents acorresponding rule score. In some implementations, the rule score canindicate when the replacement should be made or can be used to determinewhich rule should be used. For example, a correction model can includethe rules “tu”→“to”:.3 and “me tu”→“me too”:.7. The “me tu”→“me too”rule may have a higher score because it includes more words. Applyingthe correction model in this example to correct the snippet “Me tu, thatsounds great,” the rule “me tu”→“me too” can be applied because it has ahigher score than the “tu”→“to” rule. In some implementations, thescores of one or more rules can be used to create a combined confidencescore for a resulting correction that is constructed with the one ormore rules. A correction that is constructed with less rules can have ahigher score because there can be a penalty for the number of rulesemployed.

Correction model builder module 350 can extract rule word group pairsfrom aligned viable corrections by selecting aligned words or wordgroups that have at least one character difference.

The score(s) for each rule can be computed based on any combination of:the number of words in the group pair, a historical frequency for whichthis pair has been found, or difference type(s) (deletions, insertions,substitutions, or transpositions). For example, with a rule pair “wereto going visit moom”→“we're going to visit mom,” the score could becomputed by attributing a difference score based on a sum for each ofthe types of changes: 1 for each insertion, substitution, or deletion,1.5 for each transposition of length one, and 2 for each transpositionof length greater than one (3.5 in this example, resulting from oneinsertion, one deletion, and a transposition of length one) and dividingthat by a length score determined by computing the average number ofwords between the pair (5 in this example). Thus, using the combinationmethod from this example, the rule score would be 0.7. In someimplementations, the score for each rule in the correction model can beweighted based on the frequency the pair for that rule is found. In someimplementations, rules are only included in a correction module when thesame rule is found a threshold number of times.

Correction models built by correction model builder module 350 be can bestored as correction models 352. Correction models 352 can be used inthe same computing system as components 344-350, or can be transferredto other computing systems for independent use. Correction models can beused to generate a corrected language snippet for a selected languagesnippet. This can be accomplished by determining if any “n-gram” (i.e. asequence of contiguous words) of the selected language snippet matches afirst snippet of a rule included in a correction model and replacing then-gram with the second snippet of that matching rule. In someimplementations, where more than one rule is matched to an n-gram, therule with the higher score can be used. In some implementations, wheremore than one rule is matched to an n-gram, multiple possiblecorrections can be created using each matching rule, and a combinationof the scores from the used rules can be employed to select a preferredpossible correction. In some implementations, correction models 352 canbe used as an intermediate step to a translation, as a method ofexpanding the search parameters of a query, or as part of an autocorrector correction suggestion system for user input.

In some implementations, additional conditions can be compared todetermine if a rule from a correction model should be applied. Forexample, a rule can be associated with a context such as other contentitems or links, a location or location type, one or more identifiedauthor characteristics (e.g. location, age, gender, ethnicity,profession, income, friend group, etc.), or a geographic location. Ruleswith these types of contexts can be configured to be employed where theselected language snippet is associated with a sufficiently similarcontext.

In some implementations, determining if a rule matches an n-gram for aselected snippet can include finding non-exact matches. For example, ifa rule pair is “spexial”→“special,” the corrected character can bereplaced with a wild card character so any n-gram matching “spe_ial”will be replaced with “special.” Alternatively, certain likely letterscan be used to make a correction, such as the keys on a standardkeyboard surrounding the corrected letter or a similar type of lettersuch as a vowel. For example, the correction “spexial”→“special” can beabstracted as “spe[x, z, a, s, d]ial”→“special.” As another example, thecorrection “cag”→“cog” can be abstracted as “c[a, e, i, u]g”→“cog.” Insome implementations, the degree of matching for a replacement to occurcan be application specific. For example, an exact match can be neededwhen doing an automatic correction, whereas less than exact matches canresult in a replacement when creating an intermediate language snippetfor a machine translation or for augmenting query search results.

Those skilled in the art will appreciate that the components illustratedin FIGS. 1-3 described above, and in each of the flow diagrams discussedbelow, may be altered in a variety of ways. For example, the order ofthe logic may be rearranged, substeps may be performed in parallel,illustrated logic may be omitted, other logic may be included, etc.

FIG. 4 is a flow diagram illustrating a process 400 used in someimplementations for building a correction model. Process 400 begins atblock 402 and continues to block 404. At block 404, process 400 receivessets of language snippets, each set comprising at least an initiallanguage snippet and one or more subsequent language snippets. As usedherein, an initial language snippet may be the first created languagesnippet of a related series of snippets or may be a language snippetfrom a related series that is not the first of the series, but is thefirst that is included in the received set. In some implementations, thelanguage snippets included in one or more of the received languagesnippet sets can be ordered according to which language snippet is anupdate, correction, or modification of the previous language snippet. Invarious implementations, the language snippet sets can be obtained froma post to a social media website and subsequent updates to that post, asequence of similar queries made by the same user within a timeframe, orsequential versions of websites, such as recorded editions of awiki-type website. In some implementations, snippet sets can be obtainedfrom a portion of one of these sources such as by splitting posts andcorresponding updates into snippets of a maximum length or by creatingsnippets by selecting only the words within a threshold distance of achanged word. Each of the language snippet sets can include at least twolanguage snippets. In some implementations, one or more of the sets caninclude more than two language snippets, such as where a social mediauser makes multiple updates to the same post.

At block 406, the received language snippet sets can be filtered toidentify language snippets that are viable corrections. Identifyinglanguage snippets as viable corrections includes creating snippet pairs,aligning words or word groups within the snippet pairs, and identifyingsnippet pairs as viable corrections where the snippet pair does not havemore than a threshold number of unaligned words and does not have anyaligned word with a minimum character edit distance that is above athreshold. Identifying viable corrections is described in more detailbelow in relation to FIGS. 5, 6A, and 6B.

At block 408, a correction model can be built or updated using theviable corrections identified at block 406. Building a correction modelcan include determining an alignment between word groups of viablecorrections, extracting rules comprising all aligned word groups and acorresponding score. In various implementations, the rules can belimited to aligned word groups or word groups that have at least onedifference. Process 400 can incorporate the extracted rules into acorrection model. Building a correction model is described in moredetail below in relation to FIG. 7.

FIG. 5 is a flow diagram illustrating a process 500, used in someimplementations, that finds viable corrections by filtering for viablecorrections from snippet pairs. Process 500 begins at block 502 andcontinues to block 504. At block 504, process 500 receives a set ofsnippets comprising at least an initial language snippet and one or moresubsequent language snippets.

At block 506, process 500 can create pairs of snippets. The createdpairs can be all potential pairs between the snippets in the receivedset. For example, for snippets A, B, and C, with order A→B→C, the pairscould be AB, BC, and AC. In some implementations, the pairs can retainindications of an order between the pairs. In some implementations, thecreated pairs can include only those where the later language snippet isa direct update of the earlier snippet. For example, for snippets A, B,and C, with order A→B→C, the pairs could be AB and BC. In someimplementations, the created pairs can include only the first and lastsnippet. For example, for snippets A, B, and C, with order A→B→C, thepair could be AC.

At block 508, the first pair created at block 506 is set as a selectedpair. At block 510 the words between the selected pair of languagesnippets can be aligned. In various implementations, aligning words canbe performed using the word-centric approach or the character-centricapproach. Aligning words between a pair of snippets using theword-centric approach is described in more detail below in relation toFIG. 6A. Aligning words between a pair of snippets using thecharacter-centric approach is described in more detail below in relationto FIG. 6B.

At block 511, process 500 can compute a word alignment score for theselected snippet pair. In various implementations, a word alignmentscore can be computed as a total count of unaligned words or as a countof unaligned words compared to a length of one or both of the snippetsin the selected language snippet pair. For example, for a selectedsnippet pair that has an average of eight words in each snippet andthree unaligned words, the word alignment score can be the percentage ofunaligned words: 37.5%.

At decision block 512, process 500 determines whether the word alignmentscore is above a word alignment score threshold. For example, the wordalignment score threshold can be two, three, or five total unalignedwords or the equivalent of no more than 5%, 10%, 20%, 25%, or 33%unaligned words. If the word alignment score is above the word alignmentscore threshold, process 500 continues to block 528, otherwise process500 continues to block 514.

At block 514, the selected language snippet pair is deconstructed intoword pairs according to the alignment found at block 510. Where thealignment indicates a word insertion or deletion, the word pairs caninclude a word from one language snippet for half of the pair and anindication of a blank for the other half of the word pair. In someimplementations, the word pairs selected at block 514 comprise only theword pairs where there is not an exact match between the pair. In someimplementations, the word pairs selected at block 514 can comprise onlythe word pairs that correspond to a word change, but not where a word inone snippet matches to a blank in the other snippet. In someimplementations, the word pairs can maintain an order establishedbetween their corresponding language snippets. For example, for thesnippets A→B where snippet A includes words a1-aN and snippet B includeswords b1-bN, a word pair can be words a3→b5. In some implementations,word pairs can include a match between multiple words. For example, forthe snippet pairs: “this is my goden retriever” and “this is my goldenretriever,” the word pair can be “goden retriever”→“golden retriever.”

At block 518, a minimum character edit distance is computed for eachword pair determined at block 514. As discussed above, this minimumcharacter edit distance is computed such that a minimum number ofcharacter changes are used to convert (A) words in the word pair from afirst of the snippets to (B) the words in the word pair from a second ofthe snippets. The minimum character edit distances can be computed usingLevenshtein, Damerau-Levenshtein, or modified Damerau-Levenshtein editdistances. In various implementations, modified Damerau-Levenshtein editdistances can assign to some changes different values than otherchanges. For example, transposition changes can be assigned a valuehigher or lower than the value assigned to insertion, deletion, orsubstitution changes. In some implementations, any or all of insertions,deletions, substitutions or transpositions can be assigned differentvalues. For example, the value assigned to insertion and deletionchanges can be 1, the value assigned to substitution changes can be 2,while the value assigned to character transpositions can be 0.5. Invarious implementations, punctuation typically included as part of aword, such as an apostrophe in a contraction or an accent mark, can beincluded or ignored in the minimum character edit distance analysis. Insome implementations, data computed when determining the word alignmentat block 510, such as a minimum edit distance found for words at block606 or the character alignment found at block 656, can be re-used tocompute the character edit distance at block 518.

At decision block 520, process 500 determines whether any of the minimumcharacter edit distances found at block 518 are above a character editdistance threshold. For example, this character edit distance thresholdcan be two or three. The comparison at block 520 can take into accountthe length of one of the words in the selected word pair or the averagelength of the words in the selected word pair. For example, where thecharacter edit distance is no more than 20 percent of the entire word,meaning that no more than 20 percent of the characters of one word of apair were changed to arrive at the other word of the selected word pair,the character edit distance can be considered below the character editdistance threshold. If the character edit distance is above thecharacter edit distance threshold, process 500 continues to block 528,otherwise process 500 continues to block 522. At block 522 the selectedsnippet pair can be identified as a viable correction. This can include,for example, creating a list of viable corrections, storing a pointer tothe selected snippet pair, or adding the selected snippet pair to amaster list of viable corrections or, where the master list alreadycontains the selected viable correction, updating a correspondingfrequency value for that viable correction.

At decision block 528, process 500 determines whether there areadditional language snippet pairs that were identified at block 506 andthat have not been analyzed by the loop between blocks 510-530. If thereare additional language snippet pairs, process 500 continues to block530 where the next one of these language snippet pairs can be set as theselected snippet pair to be operated on by the loop between blocks510-530. If there are no additional language snippet pairs, process 500continues to block 532. At block 532, the viable corrections identifiedat block 522 can be returned. In various implementations, this caninclude providing a data structure containing the viable corrections ora locator for a data structure. In some implementations, block 522 canstore data accessible outside process 500 (e.g. storing in a variableaccessible outside a current function or writing to separate database)in which case process 500 may not need to return viable corrections.Process 500 then continues to block 534, where it ends.

FIG. 6A is a flow diagram illustrating a process 600 used in someimplementations for determining a word alignment between a pair ofsnippets. Process 600 begins at block 602 and continues to block 604. Atblock 604, process 600 can receive a pair of snippets.

At block 606, process 600 can find a word alignment between the snippetsin the received pair of snippets, where the alignment corresponds to aminimum total edit distance. Process 600 can compute the total editdistance for a selected alignment by adding together the minimum editdistance for each word pair, or word group pair, of the selectedalignment. The alignment with the lowest total edit distance is selectedas the snippet alignment.

In some implementations, to find the alignment with the lowest totaledit distance between snippet S comprising words s1 . . . sN and snippetT comprising words t1 . . . tM a recursive algorithm can be used. Forexample, edit_distance(s1 . . . sN, t1 . . .tM)=minimum(substitution_cost(s1, t1)+edit_distance(s2 . . . sN, t2 . .. tM), deletion_cost(s1)+edit_distance(s2 . . . sN, t1 . . . tM),insertion_cost(t1)+edit_distance(s1 . . . sN, t2 . . . tM)). Thisformula recurses until a termination condition: edit_distance(sequence,empty_sequence)=deletion_cost(sequence) or edit_distance(empty_sequence,sequence)=insertion_cost(sequence) is reached. In variousimplementations, process 600 can find potential alignments by: computingall possible alignments between the received snippet pair, computing allalignments that do not require reordering words, computing allalignments that do not require transpositions greater than a thresholddistance, or finding alignments that have at least a threshold ratio ofwords that have exact matches between the snippets of the snippet pair.In various implementations, word pairs can match only single wordsbetween snippets or can match groups of words between snippets.

Process 600 can then compute the minimum character edit distance foreach aligned word pair by finding a best character alignment (which canuse Levenshtein or Damerau-Levenshtein distances in variousimplementations) and assigning a value to each difference in thealignment. In some implementations, the substitution cost between twowords can be obtained by the character based edit distance between thetwo words, the deletion cost can be the number of characters of the worddeleted, the insertion cost can be the number of characters of the wordinserted, and the transposition cost can be the number of transpositionsmade or the number of transpositions made each multiplied by thattranspositions' length. The sum of these character difference values forthe word pair is the minimum character edit distance for that pair. Asdiscussed above, in some implementations, computing edit distances usingDamerau-Levenshtein can assign to a transposition a change value otherthan the value of an insertion, deletion, or substitution change. Thealignment with the lowest total edit distance is selected as the snippetpair alignment. At block 608, the snippet pair is returned with theselected alignment. At block 610, process 600 ends.

FIG. 6B is a flow diagram illustrating a process 650 used in someimplementations for determining a word alignment between a pair ofsnippets. Process 650 begins at block 652 and continues to block 654. Atblock 654, process 600 can receive a pair of snippets. At block 656, thecharacters, including white spaces, between the snippets in the receivedsnippet pair are aligned according to a minimum character edit distance.In some implementations, this alignment can use the Levenshteinalignment method, where characters are aligned by determining theminimum number of character insertions, deletions, or substitutions thatare required to transform the first snippet of the snippet pair into thesecond snippet of the snippet pair. In some implementations, thisalignment can use the Damerau-Levenshtein alignment method, wherecharacters are aligned by determining the minimum number of characterinsertions, deletions, substitutions, or transpositions required totransform the first snippet of the snippet pair into the second snippetof the snippet pair. In some implementations, the alignment methodassigns the same value to insertions, deletions, substitutions, or, inthe Damerau-Levenshtein method, transpositions when computing characteredit differences. In some implementations, the alignment method assignsvalues to insertions, deletions, substitutions, or transpositions basedon the type of change that is made. In some implementations, thealignment method assigns values to insertions, deletions, substitutions,or transpositions based on the similarity between the change, such asthe distance of the transposition, a distance on a keyboard between thecharacter in the first snippet and the aligned character in the secondsnippet, a similarity between types of the character (i.e. both numbers,both vowels, both consonants, both in a group of letters typically foundto be mistakenly substituted) in the first snippet and the alignedcharacter in the second snippet.

At block 658, aligned words can be identified based on the characteralignment found at block 656. At block 658, two words are determined tobe aligned if, in the character alignment, they have at least onecharacter in common. It is possible, in some implementations, formultiple words in one snippet of the snippet pair to be aligned to asingle word in the other snippet of the snippet pair. For example, forthe snippet pair: “asplit!”→“a split!,” the character alignment with theminimum character edit distance is:

(“a”, “a”)

(<no char>, “ ”)

(“s”, “s”)

(“p”, “p”)

(“l”, “l”)

(“i”, “i”)

(“t”, “t”)

Because “asplit” from the first snippet shares at least one characterwith both “a” and “split” in the second snippet, the word alignments are(“asplit!”, “a”) and (“asplit!”, “split!”). In this example, thepunctuation is included with the words. In some implementations,punctuation can be ignored. In some implementations, punctuation can beseparated from words by a preprocessing operation. At block 660, thesnippet pair is returned with the alignment determined at block 658. Atblock 662, process 650 ends.

FIG. 7 is a flow diagram illustrating a process 700 used in someimplementations for building a correction model using viablecorrections. Process 700 begins at block 702 and continues to block 704.At block 704, process 700 receives a viable correction, such as a viablecorrection identified by process 500.

At block 706, process 700 can generate a word alignment for the receivedviable correction. In some implementations, the word alignment can bethe word alignment found by process 500 at block 510, using eitherprocess 600 or 650. In some implementations, the word alignment can begenerated by applying a modified version of the IBM or HMM alignmentmodels. In some implementations, one of these alignment models can bemodified to only make forward jumps of a threshold amount, such as 2 or3 words. In some implementations, one of these alignment models can bemodified to do jumps that are no more than one word backward and no morethan two words forward.

At block 708, process 700 can extract the aligned words of the viablecorrection as rules. As discussed above, a rule comprises a word or wordgroup pair with a score. In some implementations, the extracted rulescan be any of the word pairs that have a difference. In variousimplementations, the rules can include all aligned word groups or wordgroups that have at least one difference. In some implementations, someextracted rules can be any of the word pairs that have a difference andwhere the number of differences between the pair is below a threshold,such as two or three differences. Process 700 can then assign a score toeach identified word pair. In some implementations, the score can becomputed based on a similarity between the word pairs, a length(characters or number of words) in the word pair, a difference type, amagnitude of one or more differences such as a jump, or a number orfrequency of differences in the word pair.

At block 710, the extracted rules can be added to a correction model. Ifthe correction model already includes the word pair of a rule, insteadof adding the rule to the model, the score for that rule can be updated.In some implementations, this updating can be an increase to the score,thereby increasing the score for rules that are found more frequently.In some implementations, the score for a rule A→B can be computed bydividing frequency(A→B) in a particular corpus by frequency(A) in thatcorpus. Thus, if rule A→B is more frequent than rule A→B′, then A→B canhave a better score. At block 712 the modified correction model can bereturned. At block 714, process 700 ends.

Several implementations of the disclosed technology are described abovein reference to the figures. The computing devices on which thedescribed technology may be implemented may include one or more centralprocessing units, memory, input devices (e.g., keyboard and pointingdevices), output devices (e.g., display devices), storage devices (e.g.,disk drives), and network devices (e.g., network interfaces). The memoryand storage devices are computer-readable storage media that can storeinstructions that implement at least portions of the describedtechnology. In addition, the data structures and message structures canbe stored or transmitted via a data transmission medium, such as asignal on a communications link. Various communications links may beused, such as the Internet, a local area network, a wide area network,or a point-to-point dial-up connection. Thus, computer-readable mediacan comprise computer-readable storage media (e.g., “non-transitory”media) and computer-readable transmission media.

As used herein, being above a threshold means that a value for an itemunder comparison is above a specified other value, that an item undercomparison is among a certain specified number of items with the largestvalue, or that an item under comparison has a value within a specifiedtop percentage value. As used herein, being below a threshold means thata value for an item under comparison is below a specified other value,that an item under comparison is among a certain specified number ofitems with the smallest value, or that an item under comparison has avalue within a specified bottom percentage value. As used herein, beingwithin a threshold means that a value for an item under comparison isbetween two specified other values, that an item under comparison isamong a middle specified number of items, or that an item undercomparison has a value within a middle specified percentage range.

As used herein, the word “or” refers to any possible permutation of aset of items. For example, the phrase “A, B, or C” refers to at leastone of A, B, C, or any combination thereof, such as any of: A; B; C; Aand B; A and C; B and C; A, B, and C; or multiple of any item such as Aand A; B, B, and C; A, A, B, C, and C, etc.

Although the subject matter has been described in language specific tostructural features and/or methodological acts, it is to be understoodthat the subject matter defined in the appended claims is notnecessarily limited to the specific features or acts described above.Specific embodiments and implementations have been described herein forpurposes of illustration, but various modifications can be made withoutdeviating from the scope of the embodiments and implementations. Thespecific features and acts described above are disclosed as exampleforms of implementing the claims that follow. Accordingly, theembodiments and implementations are not limited except as by theappended claims.

Any patents, patent applications, and other references noted above, areincorporated herein by reference. Aspects can be modified, if necessary,to employ the systems, functions, and concepts of the various referencesdescribed above to provide yet further implementations. If statements orsubject matter in a document incorporated by reference conflicts withstatements or subject matter of this application, then this applicationshall control.

We claim:
 1. A method for generating a natural language correction modelcomprising: obtaining one or more language snippet pairs comprising aninitial language snippet and a subsequent language snippet; for at leastone selected language snippet pair of the one or more language snippetpairs, identifying the selected language snippet pair as a viablecorrection pair by: aligning words between the initial language snippetand the subsequent language snippet of the selected language snippetpair to obtain an aligned version of the selected language snippet pair;computing a word alignment score for the aligned version of the selectedlanguage snippet pair; determining that the computed word alignmentscore for the aligned version of the selected language snippet pair isbelow a word alignment threshold value; computing a character editdistance for one or more of the aligned words within the aligned versionof the selected language snippet pair; and determining that eachcomputed character edit distance for the one or more of the alignedwords within the selected language snippet pair is below a characterdistance threshold value; extracting rules from the viable correctionpair; and incorporating the rules extracted from the viable correctionpair into the natural language correction model, wherein the naturallanguage correction model is used in a correction of a section of textby: identifying the section of text as matching the initial languagesnippet of the viable correction; using the subsequent language snippetof the viable correction to modify the section of text; and providingthe modified version of the section of text.
 2. The method of claim 1,wherein aligning words between the initial language snippet and thesubsequent language snippet comprises determining an alignmentcomprising one or more word pairs, each of the one or more word pairscomprising a sequence of one or more word from the initial languagesnippet and a sequence of one or more word from the subsequent languagesnippet; wherein the alignment is chosen from multiple possiblealignments by selecting the alignment with a lowest total edit distance;and wherein total edit distances for one or more of the multiplepossible alignments are computed by summing all the character editdistances of word pairs and all the character edit distances of anyunaligned words from a particular alignment.
 3. The method of claim 1,wherein aligning words between the initial language snippet and thesubsequent language snippet comprises: aligning characters, includingwhitespaces, between the initial language snippet and the subsequentlanguage snippet according to a minimum character edit distance; andidentifying a word from the initial language snippet as aligned with aword in the subsequent language snippet where, in the alignedcharacters, the word from the initial language snippet has at least onecharacter aligned with at least one character from the word from thesubsequent language snippet.
 4. The method of claim 3, wherein aligningwords between the initial language snippet and the subsequent languagesnippet comprises storing data resulting from aligning the characters;and wherein the character edit distance is based on the stored dataresulting from aligning the characters.
 5. The method of claim 1,wherein at least one edit distance is a Levenshtein distance.
 6. Themethod of claim 1, wherein at least one edit distance is aDamerau-Levenshtein distance.
 7. The method of claim 1, wherein the wordalignment score is computed as a total number of unaligned words betweenthe initial language snippet and the subsequent language snippet; andwherein determining that the computed word alignment score for thealigned version of the selected language snippet pair is below the wordalignment threshold value is accomplished by determining that the wordalignment score indicates there are no more than three unaligned words.8. The method of claim 1, wherein a selected character edit distance iscomputed as a total number of changes needed to convert a first sequenceof one or more aligned words of a pair of aligned word sequences into asecond sequence of one or more aligned words of the pair of aligned wordsequences; and wherein determining that each computed character editdistance for the one or more of the aligned words within the selectedlanguage snippet pair is below the character distance threshold value isaccomplished by determining that the selected character edit distanceindicates that the pair of aligned word sequences has no more than threechanges.
 9. The method of claim 1, wherein extracting rules from theviable correction pair comprises: obtaining a word alignment for thesnippet pair of the viable correction pair; extracting a rule wordsequence pair from the word alignment; and assigning one or more scoresto the rule word sequence pair.
 10. The method of claim 9, whereinobtaining the word alignment for the snippet pair of the viablecorrection pair comprises using HMM alignment modified to restrict jumpsto no more than one backward and no more than two forward.
 11. Themethod of claim 9, wherein obtaining the word alignment for the snippetpair of the viable correction pair comprises using the aligned versionof the selected language snippet pair.
 12. The method of claim 1 furthercomprising, for at least one identified pair of the one or more languagesnippet pairs, computing that the identified pair is not a viablecorrection by computing: that the word alignment score for theidentified pair is above the word alignment threshold value; or that thecharacter edit distance for one or more aligned words within the alignedversion of the identified pair is above the character distance thresholdvalue.
 13. The method of claim 1, wherein at least one pair of the oneor more language snippet pairs comprises: a post to a social mediawebsite, by an author, as the initial language snippet; and an update,by the author, to the post to the social media website as the subsequentlanguage snippet.
 14. The method of claim 1, wherein the naturallanguage correction model is configured to be used as part of a machinetranslation of a provided language snippet by: creating an intermediateversion of the provided language snippet by using the modified versionof the section of text in the intermediate version instead of thesection of section of text in the provided language snippet that matchesthe initial language snippet of the viable correction; performing amachine translation on the intermediate version; and providing resultsof the machine translation on the intermediate version.
 15. A system foridentifying viable corrections comprising: an interface configured toobtain one or more language snippet pairs, each obtained languagesnippet pair comprising a first language snippet and a second languagesnippet; a word alignment and scoring module configured to, for at leastone selected language snippet pair of the one or more language snippetpairs, identify the selected language snippet pair as a viablecorrection pair by: computing a word alignment score for an alignedversion of the selected language snippet pair; and determining that thecomputed word alignment score for the aligned version of the selectedlanguage snippet pair is below a word alignment threshold value; and acharacter edit distance module configured to compute a character editdistance for one or more of the aligned words within the aligned versionof the selected language snippet pair; and wherein the word alignmentand scoring module is further configured to identify the selectedlanguage snippet pair as a viable correction pair by determining thateach computed character edit distance for the one or more of the alignedwords within the selected language snippet pair is below a characterdistance threshold value; wherein the viable correction pair is used tocorrect a section of text by: identifying the section of text asmatching the initial language snippet of the viable correction; usingthe subsequent language snippet of the viable correction to modify thesection of text; and providing the modified version of the section oftext.
 16. The system of claim 15, wherein the word alignment and scoringmodule is further configured to obtain the aligned version of theselected language snippet pair by: aligning characters, includingwhitespaces, between the first language snippet and the second languagesnippet according to a minimum character edit distance; and identifyinga word from the first language snippet as aligned with a word in thesecond language snippet where the word from the first language snippethas at least one character aligned with at least one character from theword of the second language snippet in the aligned characters.
 17. Thesystem of claim 15, wherein the word alignment and scoring modulecomputes the word alignment score as a total number of unaligned wordsbetween the first language snippet and the second language snippet;wherein the word alignment and scoring module determines that thecomputed word alignment score for the aligned version of selectedlanguage snippet pair is below the word alignment threshold value bydetermining that the word alignment score indicates there are no morethan three unaligned words; wherein the character edit distance modulecomputes a selected character edit distance as a total number of changesneeded to convert a first of a pair of aligned words into a second ofthe pair of aligned words; and wherein the word alignment and scoringmodule determines that each computed character edit distance for the oneor more of the aligned words within the selected language snippet pairis below the character distance threshold value by determining that theselected character edit distance indicates that the pair of alignedwords has no more than three changes.
 18. A non-transitorycomputer-readable storage medium storing instructions that, whenexecuted by a computing system, cause the computing system to performoperations for identifying viable corrections, the operationscomprising: obtaining one or more language snippet pairs comprising aninitial language snippet and a subsequent language snippet; for at leastone selected language snippet pair of the one or more language snippetpairs, identifying the selected language snippet pair as a viablecorrection pair by: aligning words between the initial language snippetand the subsequent language snippet of the selected language snippetpair to obtain an aligned version of the selected language snippet pair;computing a word alignment score for the aligned version of the selectedlanguage snippet pair; determining that the computed word alignmentscore for the aligned version of the selected language snippet pair isbelow a word alignment threshold value; computing a character editdistance for one or more of the aligned words within the aligned versionof the selected language snippet pair; and determining that eachcomputed character edit distance for the one or more of the alignedwords within the selected language snippet pair is below a characterdistance threshold value; and wherein the viable correction pair is usedto correct a section of text by: identifying the section of text asmatching the initial language snippet of the viable correction; usingthe subsequent language snippet of the viable correction to modify thesection of text; and providing the modified version of the section oftext.
 19. The non-transitory computer-readable storage medium of claim18, wherein the operations further comprise extracting rules from theviable correction pair by: obtaining a word alignment for the snippetpair of the viable correction pair; extracting a rule word sequence pairfrom the word alignment, the rule word sequence pair comprising: A) afirst sequence of one or more words from the initial language snippet ofthe viable correction pair and B) a second sequence of one or more wordsfrom the subsequent language snippet of the of the viable correctionpair; and assigning one or more scores to the rule word sequence pair.20. The non-transitory computer-readable storage medium of claim 18,wherein the initial language snippet of the viable correction comprisesa post to a social media website, by an author; and the subsequentlanguage snippet of the viable correction comprises an update, by theauthor, to the post to the social media website.